import request from '@/config/axios'


// AI 3D模型 VO
export interface ThreedVO {
  id: number // 编号
  userId: number // 用户编号
  modelUrl: string //模型
  imageUrl: string
  thumbnailUrl: string // 缩略图
  objectPrompt: string // 提示词
  stylePrompt: string // 样式提示词
  negativePrompt: string // 反向提示词
  prompt: string //提示词
  voxelSizeShrinkFactor: number
  artStyle: string // 艺术样式
  resolution: string // 尺寸大小
  enableOriginalUv: boolean //使用模型的原始UV，而不是生成新的UV
  enablePbr: boolean //基础颜色+生成PBR贴图
  progress: number // 进度状态
  startedAt: number // 开始时间
  createdAt: number // 创建时间
  expiresAt: number // 有效时间
  finishedAt: number // 完成时间
  status: number // 完成状态（success/failure）
  taskId: string // 任务编号
  platform: string
  model: string
  funcType: string
  surfaceMode: string
  topology: string

  modelSeed: number
  imageSeed: number
  textureSeed: number
  faceLimit: number
  autoSize: boolean
  enableTexture: boolean
  modelVersion: string
  textureAlignment: string
  textureQuality: string
  orientation: string
  style: string

  mode: string
  orthographicProjection: boolean
}

export interface TextToTextureReqVO {
  platform: string // 平台
  model: string // 模型
  funcType: string
  modelUrl: string //3d模型连接
  objectPrompt: string // 提示词
  stylePrompt: string // 样式提示词
  negativePrompt: string // 反向提示词
  artStyle: string // 艺术样式
  resolution: string // 尺寸大小
  enableOriginalUv: boolean
  enablePbr: boolean
}

export interface TextTo3dReqVO {
  platform: string // 平台
  model: string // 模型
  funcType: string
  mode: string, //模式
  prompt: string //提示词
  negativePrompt: string // 反向提示词
  artStyle: string // 艺术样式

  modelSeed: number
  imageSeed: number
  textureSeed: number
  faceLimit: number
  autoSize: boolean
  enableTexture: boolean
  modelVersion: string
  textureQuality: string
  style: string
  enablePbr: boolean
}

export interface TextToRefineReqVO {
  platform: string // 平台
  model: string // 模型
  funcType: string
  mode: string, //模式
  previewTaskId: string, // 提示词
  enablePbr: true
}

export interface TextToVoxelReqVO {
  platform: string // 平台
  model: string // 模型
  funcType: string
  prompt: string // 提示词
  negativePrompt: string // 反向提示词
  voxelSizeShrinkFactor: number // 像素大小
}

export interface ImageTo3dReqVO {
  platform: string // 平台
  model: string // 模型
  funcType: string
  imageUrl: string //图片连接
  enablePbr: boolean
  /**
   * meshy
   */
  surfaceMode: string
  topology: string
  /**
   * tripo
   */
  modelSeed: number
  textureSeed: number
  faceLimit: number
  autoSize: boolean
  enableTexture: boolean
  modelVersion: string
  textureAlignment: string
  textureQuality: string
  style: string
  orientation: string
}

export interface ImagesTo3dReqVO {
  platform: string // 平台
  model: string // 模型
  funcType: string
  fileList: string[] //图片连接
  enablePbr: boolean
  modelSeed: number
  textureSeed: number
  faceLimit: number
  autoSize: boolean
  enableTexture: boolean
  modelVersion: string
  textureAlignment: string
  textureQuality: string
  style: string
  orientation: string
  mode: string //左右模式
  orthographicProjection: boolean
}

export interface ModelToAnimationReqVO {
  platform: string // 平台
  model: string // 模型
  funcType: string
  previewTaskId: string // 任务Id
  outFormat: string // 输出类型
  bakeAnimation: boolean // 动画烘培
  animation: string // 动画风格
}
// AI 3D模型 API
export const ThreedApi = {
  // 查询AI 3D模型分页
  getThreedPage: async (params: any) => {
    return await request.get({ url: `/ai/threed/page`, params })
  },

  // 查询AI 3D模型详情
  getThreed: async (id: number) => {
    return await request.get({ url: `/ai/threed/get?id=` + id })
  },

  // 新增AI 3D模型
  createThreed: async (data: ThreedVO) => {
    return await request.post({ url: `/ai/threed/create`, data })
  },

  // 修改AI 3D模型
  updateThreed: async (data: ThreedVO) => {
    return await request.put({ url: `/ai/threed/update`, data })
  },

  // 删除AI 3D模型
  deleteThreed: async (id: number) => {
    return await request.delete({ url: `/ai/threed/delete?id=` + id })
  },

  // 获取【我的】绘图记录列表
  getThreedListMyByIds: async (ids: number[]) => {
    return await request.get({ url: `/ai/threed/my-list-by-ids`, params: { ids: ids.join(',') } })
  },
  // 生成模型纹理
  generateTextToTexture: async (data: TextToTextureReqVO) => {
    return await request.post({ url: `/ai/threed/textToTexture`, data })
  },
  // 生成模型预览
  generateTextTo3d: async (data: TextTo3dReqVO) => {
    return await request.post({ url: `/ai/threed/textTo3d`, data })
  },
  // 生成模型精炼
  generateModelToRefine: async (data: TextToRefineReqVO) => {
    return await request.post({ url: `/ai/threed/modelToRefine`, data })
  },
  // 生成模型立体像素
  generateTextToVoxel: async (data: TextToVoxelReqVO) => {
    return await request.post({ url: `/ai/threed/textToVoxel`, data })
  },
  // 图转模型
  generateImageTo3d: async (data: ImageTo3dReqVO) => {
    return await request.post({ url: `/ai/threed/imageTo3d`, data })
  },
  // 图转模型
  generateImagesTo3d: async (data: ImagesTo3dReqVO) => {
    return await request.post({ url: `/ai/threed/imagesTo3d`, data })
  },
  // 模型动画
  generateAnimationRig: async (data: ModelToAnimationReqVO) => {
    return await request.post({ url: `/ai/threed/animationRig`, data })
  },
  // 模型动画
  generateAnimationRigRetarget: async (data: ModelToAnimationReqVO) => {
    return await request.post({ url: `/ai/threed/animationRigRetarget`, data })
  },
}

// AI 3D文件 VO
export interface ThreedUrlVO {
  id: number // 编号
  userId: number // 用户编号
  cate: string // 模型文件分类（model_urls/texture_urls）
  type: string // 模型文件类型（glb/fbx/usdz/base_color/metallic/normal/roughness）
  url: string // 模型文件连接
  threedId: number // 模型Id
}

// AI 3D文件 API
export const ThreedUrlApi = {
  // 查询AI 3D文件分页
  getThreedUrlPage: async (params: any) => {
    return await request.get({ url: `/ai/threed-url/page`, params })
  },

  // 查询AI 3D文件详情
  getThreedUrl: async (id: number) => {
    return await request.get({ url: `/ai/threed-url/get?id=` + id })
  },

  // 新增AI 3D文件
  createThreedUrl: async (data: ThreedUrlVO) => {
    return await request.post({ url: `/ai/threed-url/create`, data })
  },

  // 修改AI 3D文件
  updateThreedUrl: async (data: ThreedUrlVO) => {
    return await request.put({ url: `/ai/threed-url/update`, data })
  },

  // 删除AI 3D文件
  deleteThreedUrl: async (id: number) => {
    return await request.delete({ url: `/ai/threed-url/delete?id=` + id })
  },

  // 导出AI 3D文件 Excel
  exportThreedUrl: async (params) => {
    return await request.download({ url: `/ai/threed-url/export-excel`, params })
  },
}
